// =====================================================================================
// Copyright ?2006 SmartCodeGenerator created by Shahed Khan. 
/*
//Microsoft Shared Source Community License (MS-CL)
//Published: October 18, 2005
*/
// If you like this code then feel free to go ahead and use it.
// Your use of this software is entirely at your own risk.
// I make no claims or warrantees about the reliability or fitness of this code for any particular purpose.
// website www.smartcodegenerator.com, email shahed.khan@gmail.com
// =====================================================================================

using System;
using System.Reflection;
using System.Web.Caching;
using System.Collections.Specialized;
using System.Configuration.Providers;
using System.Data;


namespace SmartCodeGen.Providers  
{
	public abstract class DBSchemaProvider : ProviderBase 
	{
        private static DBSchemaProvider dbSchemaProvider;

        public static DBSchemaProvider Instance()
        {
            return null;
        }

        public static DBSchemaProvider Instance(DBSchemaProvider dbSchemaProvider)
        {
            dbSchemaProvider = dbSchemaProvider;
            return dbSchemaProvider;
		}


        public abstract ParameterSchemaCollection GetCommandParameters(CommandSchema command);
        public abstract CommandResultSchemaCollection GetCommandResultSchemas(CommandSchema command);
        public abstract CommandSchemaCollection GetCommands(DatabaseSchema database);
        public abstract string GetCommandText(CommandSchema command);
        public abstract string GetDatabaseName(DatabaseSchema database);
        public abstract ExtendedPropertyCollection GetExtendedProperties(SchemaBase schemaObject);
        public abstract ColumnSchemaCollection GetTableColumns(TableSchema table);
        public abstract DataTable GetTableData(TableSchema table);
        public abstract IndexSchemaCollection GetTableIndexes(TableSchema table);
        public abstract TableKeySchemaCollection GetTableKeys(TableSchema table);
        public abstract PrimaryKeySchema GetTablePrimaryKey(TableSchema table);
        public abstract TableSchemaCollection GetTables(DatabaseSchema database);
        public abstract TableSchemaCollection GetTables(DatabaseSchema database, string databaseName);
        public abstract ViewColumnSchemaCollection GetViewColumns(ViewSchema view);
        public abstract DataTable GetViewData(ViewSchema view);
        public abstract ViewSchemaCollection GetViews(DatabaseSchema database);
        public abstract string GetViewText(ViewSchema view);

        // Properties
        public abstract string GetDescription();
        public abstract string GetName( );

	}
}
